/**
 * @addtogroup hj1239_chl_plug_if
 * hj1239_chl_plug_if
 * @{
 */
/**
 * @file        hj1239_chl_plug_if.h
 * @brief       XXXX
 * @note        XXXX
 * @author      靳普诏(puzhao.jin@hopechart.com)
 * @date        2023/10/18
 * @version     1.0

 * @par         修改日志
 * <table>
 * <tr><th>Date         <th>Version     <th>Author      <th> Description
 * <tr><td>2023/10/18   <td>1.0         <td>靳普诏       <td> 创建初始版本
 * @copyright 杭州鸿泉物联网技术股份有限公司
 */

#ifndef _BSC_HJ1239_CHL_PLUG_IF_H_
#define _BSC_HJ1239_CHL_PLUG_IF_H_

#include "ofc/ofc_types.h"
#include "gbmsg17691/gbc_17691_codec.h"
#include "bsc_hj1239/bsc_hj1239_chl_collect_if.h"

#ifdef __cplusplus
extern "C"
{
#endif

typedef struct  IBsHj1239ChlPlugTag  IBsHj1239ChlPlug;
/**
 * 初始化方法接口
 * @param *sender  对象指针
 * @return 
 */
typedef void (* IBsHj1239ChlPlugDoInitMethod)(IBsHj1239ChlPlug *sender);

/**
 * 调度方法接口
 * @param *sender  对象指针
 * @return 
 */
typedef void (* IBsHj1239ChlPlugDoRunOnceMethod)(IBsHj1239ChlPlug *sender);

/**
 * 反初始化方法接口
 * @param *sender
 * @return 
 */
typedef void (* IBsHj1239ChlPlugDoDoneMethod)(IBsHj1239ChlPlug *sender);


/**
 * 数据发送结果通知方法（字节流）
 * @param *sender   对象指针
 * @param *buf      发送的数据
 * @param buf_len   发送的数据长度
 * @param send_ok   发送是否成功
 * @return
 */
typedef void (* IBsHj1239ChlPlugDoSendInfoNotifyMethod)(IBsHj1239ChlPlug *sender, const Byte *buf, Int32 buf_len, Bool send_ok);


/**
 * 数据接收通知方法（字节流）
 * @param *sender   对象指针
 * @param *buf      接收的数据
 * @param buf_len   接收的数据长度
 * @return
 */
typedef void (* IBsHj1239ChlPlugDoRecvInfoNotifyMethod)(IBsHj1239ChlPlug *sender, const Byte *buf, Int32 buf_len);


/**
 * 数据发送结果通知方法（结构体）
 * @param *sender   对象指针
 * @param *msg      发送的数据头信息
 * @param send_ok   发送是否成功
 * @return
 */
typedef void (* IBsHj1239ChlPlugDoSendNotifyMethod)(IBsHj1239ChlPlug *sender, const TGbc17691MsgHead *msg, Bool send_ok);


/**
 * 数据接收通知方法（结构体）
 * @param *sender   对象指针
 * @param *msg      已接收的数据头信息
 * @param *pdu      数据单元地址
 * @param pdu_len   数据单元长度
 * @return
 */
typedef void (* IBsHj1239ChlPlugDoRecvNotifyMethod)(IBsHj1239ChlPlug *sender, const TGbc17691MsgHead *msg);

/**
 * 备案激活结果通知
 * @param *sender       对象指针
 * @param record_result 激活结果
 * @param error_code    失败错误码，成功时无意义
 * @return 
 */
typedef void (* IBsHj1239ChlPlugDoRecordNotifyMethod)(IBsHj1239ChlPlug *sender, Int8 record_result, Int8 error_code);


/**
 * 执行前通知
 * @param *self         接口指针
 * @param data_type_mask     采集数据类型掩码
 * @param time          采集时间。UTC+8时间戳
 * @return
 */
typedef void (*IBsHj1239ChlPlugDoCollectNotifyMethod)(IBsHj1239ChlPlug *sender, UInt32 data_type_mask, UInt32 time_utc8);


struct  IBsHj1239ChlPlugTag
{
    IBsHj1239ChlPlugDoInitMethod            DoInit;             ///< 通道初始化
    IBsHj1239ChlPlugDoRunOnceMethod         DoRunOnce;          ///< 通道任务执行
    IBsHj1239ChlPlugDoDoneMethod            DoDone;             ///< 通道反初始化

    IBsHj1239ChlPlugDoSendInfoNotifyMethod  DoSendInfoNotify;   ///< 发送结果通知事件（字节流）
    IBsHj1239ChlPlugDoRecvInfoNotifyMethod  DoRecvInfoNotify;   ///< 接收消息通知事件（字节流）
    IBsHj1239ChlPlugDoSendNotifyMethod      DoSendNotify;       ///< 发送结果通知事件（结构体）
    IBsHj1239ChlPlugDoRecvNotifyMethod      DoRecvNotify;       ///< 接收消息通知事件（结构体）
    IBsHj1239ChlPlugDoRecordNotifyMethod    DoRecordNotify;     ///< 备案激活结果通知
    IBsHj1239ChlPlugDoCollectNotifyMethod   DoCollectNotify;    ///< 采集前通知事件
};




/**
 * 调用初始化方法接口
 * @param *self  对象指针
 * @return 
 */
void IBsHj1239ChlPlugInit(IBsHj1239ChlPlug *self);

/**
 * 调用执行方法接口
 * @param *self  对象指针
 * @return 
 */
void IBsHj1239ChlPlugRunOnce(IBsHj1239ChlPlug *self);

/**
 * 调用反初始化方法接口
 * @param *self
 * @return 
 */
void IBsHj1239ChlPlugDone(IBsHj1239ChlPlug *self);



/**
 * 备案激活结果通知
 * @param *self       对象指针
 * @param record_result 激活结果.    0x1 成功；0x02 失败
 * @param error_code    失败错误码，成功时无意义.  (0xF4 结果等待超时，其它参考hj1239标准文档)
 * @return 
 */
void IBsHj1239ChlPlugRecordNotify(IBsHj1239ChlPlug *self, const Int8 record_result, const Int8 error_code);


/**
 * 调用数据发送结果通知方法（字节流）
 * @param *self   对象指针
 * @param *buf    发送的数据
 * @param buf_len 发送的数据长度
 * @param send_ok 发送是否成功
 * @return
 */
void IBsHj1239ChlPlugSendInfoNotify(IBsHj1239ChlPlug *self, const Byte *buf, Int32 buf_len, Bool send_ok);


/**
 * 调用数据接收通知方法（字节流）
 * @param *self   对象指针
 * @param *buf    已接收的数据
 * @param buf_len 接收的数据长度
 * @return
 */
void IBsHj1239ChlPlugRecvInfoNotify(IBsHj1239ChlPlug *self, const Byte *buf, Int32 buf_len);


/**
 * 调用数据发送结果通知方法（结构体）
 * @param *self   对象指针
 * @param *msg      发送的数据头信息
 * @param send_ok   发送是否成功
 * @return
 */
void IBsHj1239ChlPlugSendNotify(IBsHj1239ChlPlug *self, const TGbc17691MsgHead *msg, Bool send_ok);


/**
 * 调用数据接收通知方法（结构体）
 * @param *self   对象指针
 * @param *msg      已接收的数据头信息
 * @return
 */
void IBsHj1239ChlPlugRecvNotify(IBsHj1239ChlPlug *self, const TGbc17691MsgHead *msg);


/**
 * 采集前通知
 * @param *self         接口指针
 * @param data_type_mask     采集数据流类型掩码
 * @param time          采集时间。UTC+8时间戳
 * @return >= 0         成功
 *         <  0         失败
 */
void IBsHj1239ChlPlugCollectNotify(IBsHj1239ChlPlug *self, UInt32 data_type_mask, UInt32 time_utc8);



#ifdef __cplusplus
}  ///< extern "C"
#endif

#endif  ///< _BSC_HJ1239_CHL_PLUG_IF_H_

/**
 * @}  Generated on "2023-10-18 14:54:34" by the tool "gen_hq_file.py >> V20230509_1" 
 */
